package paidaxing.blog.post.mapper;

import paidaxing.blog.post.entity.Categories;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 分类数据访问接口
 */
@Mapper
public interface CategoriesDao {

    /**
     * 根据ID查询分类
     * 
     * @param id 分类ID
     * @return 分类实体
     */
    Categories queryById(Long id);

    /**
     * 分页查询分类列表
     * 
     * @param offset 偏移量
     * @param limit  每页数量
     * @return 分类列表
     */
    List<Categories> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);

    /**
     * 统计分类总数
     * 
     * @return 分类总数
     */
    long count();

    /**
     * 插入分类
     * 
     * @param categories 分类实体
     * @return 影响行数
     */
    int insert(Categories categories);

    /**
     * 批量插入分类
     * 
     * @param categoriesList 分类列表
     * @return 影响行数
     */
    int insertBatch(@Param("categoriesList") List<Categories> categoriesList);

    /**
     * 批量插入或更新分类
     * 
     * @param categoriesList 分类列表
     * @return 影响行数
     */
    int insertOrUpdateBatch(@Param("categoriesList") List<Categories> categoriesList);

    /**
     * 更新分类
     * 
     * @param categories 分类实体
     * @return 影响行数
     */
    int update(Categories categories);

    /**
     * 根据ID删除分类(逻辑删除)
     * 
     * @param id 分类ID
     * @return 影响行数
     */
    int deleteById(Long id);
    
    /**
     * 根据分类ID查询文章列表
     * 
     * @param categoryId 分类ID
     * @param pageable 分页对象
     * @return 文章列表
     */
    List<paidaxing.blog.post.entity.Posts> selectPostsByCategoryId(@Param("categoryId") Long categoryId, @Param("pageable") org.springframework.data.domain.Pageable pageable);
    
    /**
     * 统计分类下的文章总数
     * 
     * @param categoryId 分类ID
     * @return 文章总数
     */
    long countPostsByCategoryId(@Param("categoryId") Long categoryId);

}